package inventario.facade;

import inventario.code.*;

import java.util.*;

public class CadastraEditaSala {

	private static ArrayList<Sala> salasCadastradas = new ArrayList<Sala>();

	public static void main() {
	}

	/**
	 * Metodo que pesquisa na lista de salas cadastradas, salas de nomes iguais.
	 * Caso ja exista uma casa com esse nome, o retorno e true, caso contrario e
	 * false.
	 * 
	 * @param nome
	 *            Nome da sala a ser pesquisada
	 * 
	 * @return boolean
	 */
	private static boolean contemSala(String nome) {
		for (Sala sala : salasCadastradas) {
			if (sala != null && sala.getNome().equals(nome)) {
				return true;
			}
		}
		return false;
	}
	

	/**
	 * Cadastra uma nova Sala
	 */
	public static boolean cadastraSala(String nome, int capacidade) {

		if (nome == null || nome.trim().isEmpty()) {
			return false;
		}
		if (contemSala(nome)) {
			return false;
		}

		if (capacidade == 0 || capacidade < 0) {
			return false;
		}

		try {
			Sala sala = new Sala(nome, capacidade);
			salasCadastradas.add(sala);
			return true;
		} catch (Exception e) {
			return false;
		}

	}

	/**
	 * Edita uma sala dentre as que ja estao cadastradas
	 */
	public static boolean editaSala(String nome, String novoNome) {

		if (salasCadastradas.size() == 0 || nome == novoNome) {
			return false;
		}
		for (int a = 0; a < salasCadastradas.size(); a++) {
			if (salasCadastradas.get(a).getNome().equals(nome)) {
				salasCadastradas.get(a).setNome(novoNome);
				return true;
			}
		}
		return false;
	}

	/**
	 * Deleta uma sala dentre as cadastradas
	 */
	public static boolean deletaSala(String salaPesquisada) {
		for (Sala sala : salasCadastradas) {
			if (sala.getNome().equals(salaPesquisada)) {
				salasCadastradas.remove(sala);
				return true;
			}
		}
		return false;
	}

	/**
	 * Metodo que move de uma sala para outra pessoas e equipamentos, se for
	 * possivel.
	 * 
	 * @param salaLogada
	 *            A sala que ja esta sendo modificada.
	 */
	public static boolean trocaSalas(Sala salaLogada, Sala salaEscolhida) {
		
		if (salaLogada.getNome().equals(salaEscolhida.getNome())){
			return false;
		}

		if (salaLogada.getCapacidade() >= salaEscolhida.getQuantUsuarios()
				&& salaEscolhida.getCapacidade() >= salaLogada
						.getQuantUsuarios()) {

			List<Usuario> pDaSala1 = salaEscolhida.usuarios;
			List<Usuario> pDaSalaLogada = salaLogada.usuarios;
			List<Maquina> mDaSala1 = salaEscolhida.maquinas;
			List<Maquina> mDaSalaLogada = salaLogada.maquinas;

			salaEscolhida.usuarios = pDaSalaLogada;
			salaLogada.usuarios = pDaSala1;
			salaEscolhida.maquinas = mDaSalaLogada;
			salaLogada.maquinas = mDaSala1;

			return true;
		}

		return false;

	}
}
